home *** CD-ROM | disk | FTP | other *** search
/ PC User 2004 August / Disc 1 / PCU0804CD1.iso / software / browsers / files / opera1.exe / OPERA.JAR / netscape / javascript / JSObject.class (.txt) < prev   
Encoding:
Java Class File  |  2004-02-12  |  4.5 KB  |  232 lines

  1. package netscape.javascript;
  2.  
  3. import com.opera.EcmaScriptObject;
  4. import com.opera.PluginContext;
  5. import java.applet.Applet;
  6.  
  7. public final class JSObject {
  8.    private EcmaScriptObject ecma_object;
  9.    private Object result;
  10.    private Object result_mutex = new Object();
  11.  
  12.    private JSObject(int var1, int var2) {
  13.       this.ecma_object = EcmaScriptObject.getObject(var1, var2);
  14.       if (this.ecma_object != null) {
  15.          this.ecma_object.ref();
  16.       }
  17.  
  18.    }
  19.  
  20.    public Object call(String var1, Object[] var2) throws JSException {
  21.       try {
  22.          JSObject var3 = (JSObject)this.getMember(var1);
  23.          synchronized(this.result_mutex) {
  24.             Object var10000;
  25.             synchronized(this) {
  26.                if (var3 == null) {
  27.                   throw new JSException("Method " + var1 + " not found.");
  28.                }
  29.  
  30.                if (this.startCall(var3, var2)) {
  31.                   this.wait();
  32.                   if (this.result instanceof JSException) {
  33.                      throw (JSException)this.result;
  34.                   }
  35.                } else {
  36.                   this.result = null;
  37.                }
  38.  
  39.                var10000 = this.result;
  40.             }
  41.  
  42.             return var10000;
  43.          }
  44.       } catch (InterruptedException var10) {
  45.          return null;
  46.       }
  47.    }
  48.  
  49.    private native boolean startCall(JSObject var1, Object[] var2);
  50.  
  51.    public boolean equals(Object var1) {
  52.       return var1 instanceof JSObject && ((JSObject)var1).ecma_object.equals(this.ecma_object);
  53.    }
  54.  
  55.    public Object eval(String var1) throws JSException {
  56.       try {
  57.          synchronized(this.result_mutex) {
  58.             Object var10000;
  59.             synchronized(this) {
  60.                if (this.startEval(var1)) {
  61.                   this.wait();
  62.                   if (this.result instanceof JSException) {
  63.                      throw (JSException)this.result;
  64.                   }
  65.                } else {
  66.                   this.result = null;
  67.                }
  68.  
  69.                var10000 = this.result;
  70.             }
  71.  
  72.             return var10000;
  73.          }
  74.       } catch (InterruptedException var8) {
  75.          return null;
  76.       }
  77.    }
  78.  
  79.    private native boolean startEval(String var1);
  80.  
  81.    public static JSObject getWindow(Applet var0) throws JSException {
  82.       if (var0.getParameter("mayscript") == null) {
  83.          throw new JSException("Applet not allowed to access javascript.");
  84.       } else {
  85.          PluginContext var1 = (PluginContext)var0.getAppletContext();
  86.          if (var1 != null) {
  87.             int var2 = var1.getJSWindow();
  88.             int var3 = var1.getESRuntime();
  89.             if (var2 != 0 && var3 != 0) {
  90.                return new JSObject(var2, var3);
  91.             }
  92.          }
  93.  
  94.          return null;
  95.       }
  96.    }
  97.  
  98.    private String escapeSingleQuotes(String var1) {
  99.       int var2 = var1.indexOf(39);
  100.       if (var2 == -1) {
  101.          return var1;
  102.       } else {
  103.          String var3 = var1.substring(0, var2) + "\\'";
  104.  
  105.          int var4;
  106.          for(var4 = var2 + 1; (var2 = var1.indexOf(39, var4)) != -1; var4 = var2 + 1) {
  107.             var3 = var3 + var1.substring(var4, var2) + "\\'";
  108.          }
  109.  
  110.          var3 = var3 + var1.substring(var4);
  111.          return var3;
  112.       }
  113.    }
  114.  
  115.    public Object getMember(String var1) {
  116.       try {
  117.          var1 = this.escapeSingleQuotes(var1);
  118.          return this.eval("this['" + var1 + "'];");
  119.       } catch (Exception var3) {
  120.          return null;
  121.       }
  122.    }
  123.  
  124.    private native boolean getMemberN(String var1);
  125.  
  126.    public void setMember(String var1, Object var2) {
  127.       try {
  128.          JSObject var3 = (JSObject)this.eval("return function(member, val) { this[member.valueOf()] = val ? val.valueOf() : null; };");
  129.          synchronized(this.result_mutex) {
  130.             synchronized(this) {
  131.                if (var3 != null && var1 != null) {
  132.                   Object[] var6 = new Object[]{var1, var2};
  133.                   if (this.startCall(var3, var6)) {
  134.                      this.wait();
  135.                   }
  136.                }
  137.             }
  138.          }
  139.       } catch (Exception var11) {
  140.       }
  141.  
  142.    }
  143.  
  144.    private native boolean setMemberN(String var1, Object var2);
  145.  
  146.    public void removeMember(String var1) {
  147.       try {
  148.          synchronized(this.result_mutex) {
  149.             synchronized(this) {
  150.                if (this.removeMemberN(var1)) {
  151.                   this.wait();
  152.                }
  153.             }
  154.          }
  155.       } catch (InterruptedException var8) {
  156.       }
  157.  
  158.    }
  159.  
  160.    private native boolean removeMemberN(String var1);
  161.  
  162.    public Object getSlot(int var1) {
  163.       try {
  164.          return this.eval("this[" + var1 + "];");
  165.       } catch (Exception var3) {
  166.          return null;
  167.       }
  168.    }
  169.  
  170.    private native boolean getSlotN(int var1);
  171.  
  172.    public void setSlot(int var1, Object var2) {
  173.       try {
  174.          JSObject var3 = (JSObject)this.eval("return function(member, val) { this[member.valueOf()] = val ? val.valueOf() : null; };");
  175.          synchronized(this.result_mutex) {
  176.             synchronized(this) {
  177.                if (var3 != null) {
  178.                   Object[] var6 = new Object[]{new Integer(var1), var2};
  179.                   if (this.startCall(var3, var6)) {
  180.                      this.wait();
  181.                   }
  182.                }
  183.             }
  184.          }
  185.       } catch (Exception var11) {
  186.       }
  187.  
  188.    }
  189.  
  190.    private native boolean setSlotN(int var1, Object var2);
  191.  
  192.    public String toString() {
  193.       try {
  194.          Object var1 = this.eval("this.toString()");
  195.          return var1 != null && var1 instanceof String ? (String)var1 : null;
  196.       } catch (JSException var2) {
  197.          return null;
  198.       }
  199.    }
  200.  
  201.    protected void finalize() {
  202.       try {
  203.          if (this.ecma_object != null) {
  204.             this.ecma_object.unref();
  205.          }
  206.  
  207.          super.finalize();
  208.       } catch (Throwable var2) {
  209.       }
  210.  
  211.    }
  212.  
  213.    private void setResult(Object var1) {
  214.       synchronized(this) {
  215.          this.result = var1;
  216.          this.notify();
  217.       }
  218.    }
  219.  
  220.    private void setExceptionResult() {
  221.       this.result = new JSException("JavaScript exception");
  222.    }
  223.  
  224.    private int getESObjectPtr() {
  225.       return this.ecma_object != null ? this.ecma_object.getESObjectPtr() : 0;
  226.    }
  227.  
  228.    private int getESRuntimePtr() {
  229.       return this.ecma_object != null ? this.ecma_object.getESRuntimePtr() : 0;
  230.    }
  231. }
  232.